// 游戏核心类型定义

import { MoodItem } from "@/systems/MoodSystem";

// 位置坐标
export interface Position {
  x: number;
  y: number;
}

// 棋手单位类型
export type ChessUnitType = 'soldier' | 'cannon' | 'horse' | 'chariot' | 'advisor' | 'minister' | 'general';

// 敌军单位类型
export type EnemyUnitType = 'infantry' | 'cavalry' | 'shieldBearer' | 'siegeEngine' | 'eliteGeneral';

// 游戏模式
export type GameMode = 'campaign' | 'endless' | 'puzzle';

// 游戏状态
export type GameStatus = 'playing' | 'paused' | 'victory' | 'defeat';

// 棋手单位接口
export interface ChessUnit {
  id: string;
  type: ChessUnitType;
  position: Position;
  level: number;
  health: number;
  maxHealth: number;
  attackPower: number;
  attackRange: number;
  attackSpeed: number; // 攻击间隔（毫秒）
  cost: number;
  specialAbility?: string;
  lastAttackTime?: number;
  buff?: {
    type: string;
    startTime: number;
    duration: number;
    attackBonus?: number;
    speedBonus?: number;
  };
}

// 敌军单位接口
export interface EnemyUnit {
  id: string;
  type: EnemyUnitType;
  position: Position;
  health: number;
  maxHealth: number;
  speed: number; // 移动速度（像素/秒）
  armor: number;
  reward: number; // 击杀奖励的棋魂数量
  pathIndex: number; // 在路径上的索引位置
  progress: number; // 在当前路径段的进度（0-1）
  lastHitTime?: number; // 上次受伤时间
  deathTime?: number; // 死亡时间
}

// 技能状态
export interface SkillState {
  cooldown: number; // 冷却时间（毫秒）
  energy: number; // 当前能量值
  maxEnergy: number; // 最大能量值
  lastUsedTime?: number;
}

// 游戏技能
export interface GameSkills {
  fireAttack: SkillState;
  reinforcement: SkillState;
  inspire: SkillState;
}

// 波次配置
export interface WaveConfig {
  enemies: {
    type: EnemyUnitType;
    count: number;
    interval: number; // 生成间隔（毫秒）
  }[];
  delay: number; // 波次开始前的延迟（毫秒）
}

// 关卡配置
export interface LevelConfig {
  id: string;
  name: string;
  mode: GameMode;
  boardLayout: number[][]; // 9x10 棋盘布局，0表示不可通行，1表示可通行
  enemyPath: Position[]; // 敌军行进路径
  waves: WaveConfig[];
  initialChessSpirit: number;
  allowedUnits: ChessUnitType[];
  playerHealth: number; // 玩家初始生命值
}

// 游戏状态
export interface GameState {
  currentWave: number;
  totalWaves: number;
  playerHealth: number;
  chessSpirit: number; // 棋魂资源
  score: number; // 游戏得分
  gameTime: number; // 游戏时间
  units: ChessUnit[];
  enemies: EnemyUnit[];
  skills: GameSkills;
  gameStatus: GameStatus;
  selectedUnit?: ChessUnitType; // 当前选中的单位类型
  gameSpeed: number; // 游戏速度倍率
  lastUpdateTime: number; // 上次更新时间
  moodValue: number; // 意境值
  moodItems: MoodItem[];
}

// 注意：PlayerProgress类型定义已移至 src/utils/storage.ts

// 游戏设置
export interface GameSettings {
  masterVolume: number; // 主音量（0-1）
  sfxVolume: number; // 音效音量（0-1）
  musicVolume: number; // 音乐音量（0-1）
  quality: 'low' | 'medium' | 'high'; // 画质设置
  fullscreen: boolean;
  showGrid: boolean; // 是否显示网格
  showPath: boolean; // 是否显示敌军路径
}

// 棋手单位配置
export interface ChessUnitConfig {
  type: ChessUnitType;
  name: string;
  description: string;
  baseStats: {
    health: number;
    attackPower: number;
    attackRange: number;
    attackSpeed: number;
    cost: number;
  };
  upgradeStats: {
    healthGrowth: number;
    attackPowerGrowth: number;
    costGrowth: number;
  };
  specialAbility: string;
  deploymentRules: string; // 部署规则描述
  maxLevel: number;
}

// 敌军单位配置
export interface EnemyUnitConfig {
  type: EnemyUnitType;
  name: string;
  description: string;
  baseStats: {
    health: number;
    speed: number;
    armor: number;
    reward: number;
  };
  specialAbility?: string;
}

// 游戏事件
export interface GameEvent {
  id: string;
  type: 'unitDeployed' | 'enemyKilled' | 'waveCompleted' | 'skillUsed' | 'playerDamaged';
  timestamp: number;
  data: any;
}

// Canvas渲染上下文
export interface RenderContext {
  ctx: CanvasRenderingContext2D;
  canvas: HTMLCanvasElement;
  cellSize: number;
  boardWidth: number;
  boardHeight: number;
}

// 动画帧数据
export interface AnimationFrame {
  id: string;
  startTime: number;
  duration: number;
  easing: (t: number) => number;
  onUpdate: (progress: number) => void;
  onComplete?: () => void;
}